﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLL
{
    public class LapPhieuNhapSachBLL : BaseBLL
    {
        BLL.QuiDinhBLL _QuiDinhBLL;
        DAL.PhieuNhapSachDAO _PhieuNhapSachDAO;
        DAL.DauSachDAO _DauSachDAO;
        DAL.ChiTietNhapSachDAO _ChiTietNhapSachDAO;

        public LapPhieuNhapSachBLL()
        {
            _QuiDinhBLL = new BLL.QuiDinhBLL();
            _PhieuNhapSachDAO = new DAL.PhieuNhapSachDAO();
            _DauSachDAO = new DAL.DauSachDAO();
            _ChiTietNhapSachDAO = new DAL.ChiTietNhapSachDAO();
        }

        private int CheckQD_1(
            System.Data.SqlClient.SqlConnection connection,
            System.Data.SqlClient.SqlTransaction transaction,
            ref DTO.DauSachDTO dto)
        {
            if (dto.LuongTon < _QuiDinhBLL.NhapToiThieu)
                return 1;
            if (_DauSachDAO.Exists(connection, transaction, ref dto) < 0)
                return 0;
            else if (dto.LuongTon >= _QuiDinhBLL.TonToiDa)
                return 2;
            else
                return 0;
        }

        public int LapPhieu(DateTime ngayLap,List<DTO.DauSachDTO> sachs)
        {
            int r = -1;
            try
            {
                System.Data.SqlClient.SqlConnection connection = OpenConnection();
                System.Data.SqlClient.SqlTransaction transaction = BeginTransaction();

                DTO.PhieuNhapSachDTO phieudto = new DTO.PhieuNhapSachDTO();
                phieudto.NgayNhap = ngayLap;
                r = _PhieuNhapSachDAO.Insert(connection, transaction, phieudto);
                phieudto.ID = r;
                DTO.ChiTietNhapSachDTO chitietdto = new DTO.ChiTietNhapSachDTO();
                DTO.DauSachDTO sachdto = null;
                chitietdto.IDPhieuNhap = phieudto.ID;

                foreach (DTO.DauSachDTO dto in sachs)
                {
                    sachdto = new DTO.DauSachDTO(dto);
                    r = CheckQD_1(connection, transaction, ref sachdto);
                    if (r != 0)
                    {
                        Rollback();
                        CloseConnection();
                        return -1;
                    }
                    sachdto.LuongTon += dto.LuongTon;
                    if (sachdto.ID <= 0)
                    {
                        r = _DauSachDAO.Insert(connection, transaction, sachdto);
                        sachdto.ID = r;
                    }
                    else
                        r = _DauSachDAO.Update(connection, transaction, sachdto);
                    chitietdto.IDSach = sachdto.ID;
                    chitietdto.SoLuong = dto.LuongTon;
                    r = _ChiTietNhapSachDAO.Insert(connection, transaction, chitietdto);
                }

                Commit();
                CloseConnection();
                return r;
            }
            catch (System.Exception ex)
            {
                Rollback();
                CloseConnection();
                throw new System.Exception("LapPhieu failed " + ex.Message);
            }
            finally
            {
                CloseConnection();
            }
        }
    }
}
